package zb.blog.service.impl;

import org.json.JSONObject;
import org.springframework.stereotype.Service;
import zb.blog.base.global.GlobalVar;
import zb.blog.base.util.gt3.GeetestLib;
import zb.blog.service.IVerificationCode;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;

@Service
public class VerificationCode implements IVerificationCode {
    @Override
    public String initGeetest(HttpServletRequest request) {
        GeetestLib gtSdk = new GeetestLib(GlobalVar.GEETEST_ID, GlobalVar.GEETEST_KEY, GlobalVar.NEWFAILBACK);
        String resStr = "{}";
        //自定义userid
        String userid = "test";
        //自定义参数,可选择添加
        HashMap<String, String> param = new HashMap<String, String>();
        param.put("user_id", userid); //网站用户id
        //param.put("client_type", "web"); //web:电脑上的浏览器；h5:手机上的浏览器，包括移动应用内完全内置的web_view；native：通过原生SDK植入APP应用的方式
        param.put("ip_address", "127.0.0.1"); //传输用户请求验证时所携带的IP
        //进行验证预处理
        int gtServerStatus = gtSdk.preProcess(param);
        //将服务器状态设置到session中
        request.getSession().setAttribute(gtSdk.gtServerStatusSessionKey, gtServerStatus);
        //将userid设置到session中
        request.getSession().setAttribute("userid", userid);
        resStr = gtSdk.getResponseStr();
        return resStr;
    }

    /**
     * 提交表单时候调用此方法
     *
     * @return
     */
    public int validateCode(HttpSession session, Map<String, String> geeParam) {
        GeetestLib gtSdk = new GeetestLib(GlobalVar.GEETEST_ID, GlobalVar.GEETEST_KEY, GlobalVar.NEWFAILBACK);
        String challenge = geeParam.get(GeetestLib.fn_geetest_challenge);
        String validate = geeParam.get(GeetestLib.fn_geetest_validate);
        String seccode = geeParam.get(GeetestLib.fn_geetest_seccode);

        //从session中获取gt-server状态
        int gt_server_status_code = (Integer) session.getAttribute(gtSdk.gtServerStatusSessionKey);

        //从session中获取userid
        String userid = (String) session.getAttribute("userid");

        //自定义参数,可选择添加
        HashMap<String, String> param = new HashMap<String, String>();
        param.put("user_id", userid); //网站用户id
        //param.put("client_type", "web"); //web:电脑上的浏览器；h5:手机上的浏览器，包括移动应用内完全内置的web_view；native：通过原生SDK植入APP应用的方式
        param.put("ip_address", "127.0.0.1"); //传输用户请求验证时所携带的IP

        int gtResult = 0;

        if (gt_server_status_code == 1) {
            //gt-server正常，向gt-server进行二次验证
            gtResult = gtSdk.enhencedValidateRequest(challenge, validate, seccode, param);
            System.out.println(gtResult);
        } else {
            // gt-server非正常情况下，进行failback模式验证
            System.out.println("failback:use your own server captcha validate");
            gtResult = gtSdk.failbackValidateRequest(challenge, validate, seccode);
        }
        return gtResult;
    }


}
